home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6-1 / Night Owl's Shareware - PDSI-006-1 - Night Owl Corp (1992).iso / 033a / mfm_109b.arj / MFM.PAS < prev    next >
Pascal/Delphi Source File  |  1991-06-20  |  11KB  |  341 lines

  1. Program Maximus_File_Manager;
  2.  
  3. Uses
  4.   Crt, Dos, MaxAreas, Memory, MfmCopy, Screen, Strings;
  5.  
  6. Const
  7.   Pgmid = 'MFM 1.09b 20jun91 MWBJR Enterprise 1:273/701.0 (215)641-0270';
  8.   Base153A = '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@!#$%&''()-^_`{}~';
  9.   Base153B = 'ÇÜÄÅÉÆÖ¢£¥₧ƒÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩';
  10.   Base153C = '╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■';
  11.  
  12. Type
  13.   TypeOfRecordType = (Comment,FileRecord,Orphan,Offline);
  14.   ListPtr = ^ListRecord;
  15.   ListRecord = Record
  16.     NextEntry, PrevEntry : ListPtr;
  17.     TypeOfRecord : TypeOfRecordType;
  18.     FileName : String[12];
  19.     FileSize, FileDate : LongInt;
  20.     Description : String[144];
  21.     Tagged : Boolean;
  22.   End;
  23.   AreaPtr = ^AreaRecord;
  24.   AreaRecord = Record
  25.     NextEntry, PrevEntry : AreaPtr;
  26.     AreaPath : String[40];
  27.   End;
  28.   S8 = String[8];
  29.  
  30. Var
  31.   Gcx : Char;
  32.   Gbx : Byte;
  33.   Counter, Row, AreaCounter, OffSet, Columns, ColumnPos : Byte;
  34.   Result : Word;
  35.   FileList, NewFileList : Text;
  36.   DirInfo : SearchRec;
  37.   Date : DateTime;
  38.   Month, Day : String[2];
  39.   Year : String[4];
  40.   AreaMask : String[20];
  41.   FileAreaPath : String[80];
  42.   WorkString : String;
  43.   NumberOfEntries, NumberOfAreaEntries : Word;
  44.   D : DirStr;
  45.   N : NameStr;
  46.   E : ExtStr;
  47.   Altered, FilesBbs : Boolean;
  48.   FirstEntry, LastEntry, NewEntry, OldEntry, TopEntry, NextPrintEntry,
  49.   CurrentEntry, StackEntry, KillEntry, BeginSort, EndSort : ListPtr;
  50.   FirstAreaEntry, LastAreaEntry, NewAreaEntry,
  51.   OldAreaEntry, CurrentAreaEntry, ChooseAreaEntry : AreaPtr;
  52.   StringToFind : String[12];
  53.   FreeSpace : Longint;
  54.   FreeSpaceString : String[6];
  55.   OkToAddToList, Changed : Boolean;
  56.   Base153 : String[153];
  57. {========================================================================}
  58.  
  59. {$I DISPLAY.PAS}
  60. {$I SETUP.PAS}
  61. {$I HELP.PAS}
  62. {$I EDIT.PAS}
  63. {$I ADOPTINS.PAS}
  64. {$I PUSHPOP.PAS}
  65. {$I SAVEKILL.PAS}
  66. {$I QUIT.PAS}
  67. {$I AREA.PAS}
  68. {$I COPYMOVE.PAS}
  69. {$I SORT.PAS}
  70. {$I RENFIND.PAS}
  71. {$I VIEWFILE.PAS}
  72.  
  73. {========================================================================}
  74. Procedure ParseCommandLine;
  75.   Var
  76.     x : Byte;
  77.     FileAreaPathOk, AreaPathOk, OutputSelected : Boolean;
  78.   Begin
  79.     ReDirectTo := StandardIO; FileAreaPath := ''; Columns := 5; ColumnPos := 16;
  80.     FileAreaPathOk := False; AreaPathOk := False; OutputSelected := False;
  81.     Assign(Input,''); Reset(Input);
  82.     Assign(Output,''); Rewrite(Output);
  83.     WriteLn(Pgmid); WriteLn;
  84.     If ParamCount = 0 Then
  85.     Begin
  86.       ReDirectTo := Console;
  87.       OutputSelected := True;
  88.       AssignCrt(Input); Reset(Input);
  89.       AssignCrt(Output); Rewrite(Output);
  90.       Fsplit(ParamStr(0),D,N,E);
  91.       AreaPath := D + 'AREA.DAT';
  92.       GetAreaTable;
  93.       SetupScreen;
  94.       FileAreaPath := ChooseArea;
  95.       If (FileAreaPath = 'QUIT') Or (FileAreaPath = 'QUITQUICK') Then
  96.       Begin
  97.         Halt(250);
  98.       End;
  99.     End
  100.     Else
  101.     Begin
  102.       For x := 1 To ParamCount Do
  103.       Begin
  104.         If Copy(UpperString(ParamStr(x)),1,2) = '-A' Then
  105.         Begin
  106.           AreaPathOk := True;
  107.           AreaPath := Copy(UpperString(ParamStr(x)),3,Length(ParamStr(x))-2);
  108.           If Length(AreaPath) > 0 Then
  109.           Begin
  110.             FindFirst(AreaPath,Archive,DirInfo);
  111.             If DosError <> 0 Then
  112.             Begin
  113.               If Copy(AreaPath,Length(AreaPath),1) <> '\' Then AreaPath := AreaPath + '\';
  114.               FindFirst(AreaPath+'AREA.DAT',Archive,DirInfo);
  115.               If DosError <> 0 Then
  116.               Begin
  117.                 WriteLn('AREA.DAT not found in '+AreaPath+' !');
  118.                 Halt(1);
  119.               End
  120.               Else
  121.               Begin
  122.                 AreaPath := AreaPath + 'AREA.DAT';
  123.               End;
  124.             End;
  125.           End;
  126.         End;
  127.         If Copy(UpperString(ParamStr(x)),1,2) = '-C' Then
  128.         Begin
  129.           OutputSelected := True;
  130.           If Copy(ParamStr(x),3,1) = '0' Then
  131.           Begin
  132.             ReDirectTo := Console;
  133.             AssignCrt(Input); Reset(Input);
  134.             AssignCrt(Output); Rewrite(Output);
  135.           End;
  136.           If Copy(ParamStr(x),3,1) = '1' Then
  137.           Begin
  138.             ReDirectTo := ComPort1;
  139.             Assign(Input,'Com1'); Reset(Input);
  140.             Assign(Output,'Com1'); Rewrite(Output);
  141.           End;
  142.           If Copy(ParamStr(x),3,1) = '2' Then
  143.           Begin
  144.             ReDirectTo := ComPort2;
  145.             Assign(Input,'Com2'); Reset(Input);
  146.             Assign(Output,'Com2'); Rewrite(Output);
  147.           End;
  148.           If Copy(ParamStr(x),3,1) = '9' Then
  149.           Begin
  150.             ReDirectTo := StandardIO;
  151.             Assign(Input,''); Reset(Input);
  152.             Assign(Output,''); Rewrite(Output);
  153.           End;
  154.         End;
  155.         If Copy(UpperString(ParamStr(x)),1,2) = '-P' Then
  156.         Begin
  157.           FileAreaPathOk := True;
  158.           FileAreaPath := Copy(UpperString(ParamStr(x)),3,Length(ParamStr(x))-2);
  159.           If Length(FileAreaPath) > 0 Then
  160.           Begin
  161.             If Copy(FileAreaPath,Length(FileAreaPath),1) <> '\' Then FileAreaPath := FileAreaPath + '\';
  162.             FindFirst(FileAreaPath+'*.*',AnyFile,DirInfo);
  163.             If DosError <> 0 Then
  164.             Begin
  165.               WriteLn('Directory '+FileAreaPath+' not found!');
  166.               Halt(1);
  167.             End;
  168.           End;
  169.         End;
  170.         If Copy(UpperString(ParamStr(x)),1,2) = '-K' Then
  171.         Begin
  172.           Val(Copy(ParamStr(x),3,1),Columns,Result);
  173.           If Columns < 3 Then Columns := 3;
  174.           If Columns > 8 Then Columns := 8;
  175.         End;
  176.       End;
  177.       If Columns = 3 Then ColumnPos := 25;
  178.       If Columns = 4 Then ColumnPos := 20;
  179.       If Columns = 5 Then ColumnPos := 16;
  180.       If Columns = 6 Then ColumnPos := 14;
  181.       If Columns = 7 Then ColumnPos := 12;
  182.       If Columns = 8 Then ColumnPos := 10;
  183.       If (Not AreaPathOk) Then
  184.       Begin
  185.         Fsplit(ParamStr(0),D,N,E);
  186.         AreaPath := D + 'AREA.DAT';
  187.       End;
  188.       GetAreaTable;
  189.       If (Not OutputSelected) Then
  190.       Begin
  191.         ReDirectTo := Console;
  192.         OutputSelected := True;
  193.         AssignCrt(Input); Reset(Input);
  194.         AssignCrt(Output); Rewrite(Output);
  195.       End;
  196.       SetupScreen;
  197.       If (Not FileAreaPathOk) Then
  198.       Begin
  199.         FileAreaPath := ChooseArea;
  200.         If (FileAreaPath = 'QUIT') Or (FileAreaPath = 'QUITQUICK') Then
  201.         Begin
  202.           Halt(250);
  203.         End;
  204.       End;
  205.     End;
  206.   End;
  207. {========================================================================}
  208. Begin
  209.   Altered := False; BeginSort := NIL; EndSort := NIL;
  210.   Base153 := Base153A + Base153B + Base153C;
  211.   ParseCommandLine;
  212.   NumberOfEntries := 0; BuildList;
  213.   StringToFind := '';
  214.   If NumberOfEntries = 0 Then
  215.   Begin
  216.     AnsiGotoXY(25,1); AnsiClearToEOL;
  217.     Write('This area contains no files!');
  218.     Repeat
  219.       FileAreaPath := ChooseArea;
  220.       NumberOfEntries := 0; BuildList;
  221.       If NumberOfEntries = 0 Then
  222.       Begin
  223.         AnsiGotoXY(25,1); AnsiClearToEOL;
  224.         Write('This area contains no files!');
  225.       End;
  226.     Until NumberOfEntries > 0;
  227.   End;
  228.   If NumberOfEntries > 0 Then
  229.   Begin
  230.     Row := 1; CurrentEntry := FirstEntry; TopEntry := FirstEntry; DisplayScreen;
  231.     Repeat
  232.       Gcx := UpCase(FileAreaPath[1]);
  233.       AnsiGotoXY(24,62);
  234.       NewTextColor(Black); NewTextBackground(Cyan);
  235.       FreeSpace := DiskFree(Ord(Gcx)-64) Div 1024;
  236.       If FreeSpace < 1024 Then
  237.       Begin
  238.         Write(FreeSpace:4); Write('K');
  239.       End
  240.       Else
  241.       Begin
  242.         Str(FreeSpace/1024:3:1,FreeSpaceString);
  243.         Write(FreeSpaceString:4); Write('M');
  244.       End;
  245.       NewTextColor(White); NewTextBackground(Black);
  246.       AnsiGotoXY(24,80);
  247.       Gbx := GetInput;
  248.       Gcx := Upcase(Chr(Gbx));
  249.       If Gbx = 0 Then
  250.       Begin
  251.         Gbx := GetInput;
  252.         Case Gbx Of
  253.           31 : Begin
  254.                  ShellToDos;
  255.                  Gcx := ^@;
  256.                End;
  257.           33 : Begin
  258.                  CallShez;
  259.                  Gcx := ^@;
  260.                End;
  261.           38 : Begin
  262.                  CallList;
  263.                  Gcx := ^@;
  264.                End;
  265.           47 : Begin
  266.                  ViewFile;
  267.                  Gcx := ^@;
  268.                End;
  269.           72 : Gcx := '8';
  270.           80 : Gcx := '2';
  271.           73 : Gcx := '9';
  272.           81 : Gcx := '3';
  273.           71 : Gcx := '7';
  274.           79 : Gcx := '1';
  275.         End;
  276.       End;
  277.       Case Gcx Of
  278.         ^A  : AdoptAllOrphans;
  279.         ^B  : FindString('B');
  280.         ^D  : FindString('D');
  281.         ^F  : FindString('F');
  282.         ^Q  : Begin
  283.                 If Altered Then SaveList;
  284.                 Halt(0);
  285.               End;
  286.         ^X  : Begin
  287.                 If CurrentEntry^.PrevEntry <> NIL Then
  288.                   Begin
  289.                     CurrentEntry^.Description := CurrentEntry^.PrevEntry^.Description;
  290.                     NextPrintEntry := CurrentEntry;
  291.                     DisplayRecord(Row);
  292.                     DisplayCurrentLocation;
  293.                   End;
  294.               End;
  295.         ' ' : Begin
  296.                 CurrentEntry^.Tagged := (Not CurrentEntry^.Tagged);
  297.                 LineDown;
  298.                 If CurrentEntry^.NextEntry = NIL Then DisplayCurrentLocation;
  299.               End;
  300.         '8' : LineUp;
  301.         '2' : LineDown;
  302.         '9' : PageUp;
  303.         '3' : PageDown;
  304.         '7' : TopOfList;
  305.         '1' : BottomOfList;
  306.         '#' : MassMove;
  307.         '$' : MassCopy;
  308.         'A' : AdoptAbandon(1);
  309.         'C' : CopyFile;
  310.         'D' : ChangeFileDate;
  311.         'E' : EditDescription;
  312.         'F' : BeginSort := CurrentEntry;
  313.         'I' : InsertBlank;
  314.         'K' : PushRecord(KillEntry);
  315.         'L' : EndSort := CurrentEntry;
  316.         'M' : MoveFile;
  317.         'N' : ChooseNewArea;
  318.         'Q' : Quit;
  319.         'R' : RenameFile;
  320.         'S' : SortList;
  321.         'T' : SortListTime;
  322.         'U' : PopRecord(KillEntry,'B');
  323.         'W' : SaveList;
  324.         '<' : PushRecord(StackEntry);
  325.         '>' : PopRecord(StackEntry,'A');
  326.         ',' : PushRecord(StackEntry);
  327.         '.' : PopRecord(StackEntry,'B');
  328.         '[' : StackPrev(StackEntry);
  329.         ']' : StackNext(StackEntry);
  330.         ';' : ShowStack(StackEntry);
  331.         '{' : StackPrev(KillEntry);
  332.         '}' : StackNext(KillEntry);
  333.         ':' : ShowStack(KillEntry);
  334.         '!' : ReDrawScreen;
  335.         '?' : Help;
  336.       End;
  337.     Until Gcx = #255;
  338.   End;
  339. End.
  340. {========================================================================}
  341.